// 路由中间件的使用基本步骤
const express = require('express');

// 定义路由中间件对象（本质上是一个中间件函数）
// router --> (req,res,next)=>{}
let router = express.Router();

// 给路由注册get和post方法进行逻辑处理
// 1.0 注册用户
router.post('/register', (req, res) => {
    // 1.0 处理参数
    let { userName, userPwd } = req.body;

    // 2.0 处理响应
    // 判断如果username存在了，则返回201注册失败（用户已经存在）
    let querySql = ` select * from user where username = '${userName}' `;
    res.execSql(querySql, (error, result) => {
        if (error) {
            res.send({ code: 500, msg: error.message });
            return;
        }

        // 表示注册的用户名存在,则返回201
        if (result.length > 0) {
            res.send({ code: 201, msg: `用户名${userName}已注册，请更换` });
            return;
        }

        // 插入逻辑
        // 2.1 通过insert into 语法将 userName, userPwd的值插入到表user
        let sql = ` insert into user (username,password) values('${userName}','${userPwd}') `;
        // 2.2 执行
        res.execSql(sql, (error, result) => {
            // 响应
            if (error) {
                res.send({ code: 500, msg: error.message });
                return;
            }

            // 成功
            res.send({ code: 200, msg: '注册成功' });
        })
    })
});

// 2.0 登录
router.post('/login', (req, res) => {
    // 1.0 处理请求参数
    let { userName, userPwd } = req.body;

    // 2.0 处理响应逻辑
    // 2.1 验证用户名和密码是否正确
    let sql = ` select * from user where username = '${userName}' and password = '${userPwd}' `;
    res.execSql(sql, (error, results) => {
        if (error) {
            res.send({ code: 500, msg: error.message });
            return; //阻止后续代码运行
        }

        // 2.2 如果用户名和密码不为空，则results长度>0
        if (results.length > 0) {
            // 成功响应
            res.send({ code: 200, msg: '登录成功', token: createToken(userName) });

        } else {
            // 用户名或者密码错误的响应
            res.send({ code: 201, msg: '用户名或者密码错误' });
        }
    })
})

// 负责生成token方法的
const jwt = require('jsonwebtoken');
function createToken(uname) {
    // 方法可以生成一个有效时间为1天的token
    let pwd = 'itheima67';
    let token = jwt.sign({ // 明文 秘文
        username: uname
    }, pwd, { expiresIn: 60 * 60 * 24 });

    // console.log(token);
    // 注意点：token返回之前需要添加Bearer 前缀
    return 'Bearer ' + token;
}


// 导出
module.exports = router;